
/*!
 * vue-awesome-swiper v4.1.1
 * Copyright (c) Surmon. All rights reserved.
 * Released under the MIT License.
 * Surmon <https://github.com/surmon-china>
 */

(function(g,f){typeof exports==='object'&&typeof module!=='undefined'?f(exports,require('swiper'),require('vue')):typeof define==='function'&&define.amd?define(['exports','swiper','vue'],f):(g=g||self,f(g.VueAwesomeSwiper={},g.Swiper,g.Vue));}(this,(function(exports, SwiperClass, Vue){'use strict';SwiperClass=SwiperClass&&Object.prototype.hasOwnProperty.call(SwiperClass,'default')?SwiperClass['default']:SwiperClass;Vue=Vue&&Object.prototype.hasOwnProperty.call(Vue,'default')?Vue['default']:Vue;/**
    * @file vue-awesome-swiper
    * @module constants
    * @author Surmon <https://github.com/surmon-china>
    */
   var CoreNames;
   (function (CoreNames) {
       CoreNames["SwiperComponent"] = "Swiper";
       CoreNames["SwiperSlideComponent"] = "SwiperSlide";
       CoreNames["SwiperDirective"] = "swiper";
       CoreNames["SwiperInstance"] = "$swiper";
   })(CoreNames || (CoreNames = {}));
   var DEFAULT_CLASSES = Object.freeze({
       containerClass: 'swiper-container',
       wrapperClass: 'swiper-wrapper',
       slideClass: 'swiper-slide'
   });
   var ComponentEvents;
   (function (ComponentEvents) {
       ComponentEvents["Ready"] = "ready";
       ComponentEvents["ClickSlide"] = "clickSlide";
   })(ComponentEvents || (ComponentEvents = {}));
   var ComponentPropNames;
   (function (ComponentPropNames) {
       ComponentPropNames["AutoUpdate"] = "autoUpdate";
       ComponentPropNames["AutoDestroy"] = "autoDestroy";
       ComponentPropNames["DeleteInstanceOnDestroy"] = "deleteInstanceOnDestroy";
       ComponentPropNames["CleanupStylesOnDestroy"] = "cleanupStylesOnDestroy";
   })(ComponentPropNames || (ComponentPropNames = {}));
   // https://swiperjs.com/api/#events
   var SWIPER_EVENTS = [
       'init',
       'beforeDestroy',
       'slideChange',
       'slideChangeTransitionStart',
       'slideChangeTransitionEnd',
       'slideNextTransitionStart',
       'slideNextTransitionEnd',
       'slidePrevTransitionStart',
       'slidePrevTransitionEnd',
       'transitionStart',
       'transitionEnd',
       'touchStart',
       'touchMove',
       'touchMoveOpposite',
       'sliderMove',
       'touchEnd',
       'click',
       'tap',
       'doubleTap',
       'imagesReady',
       'progress',
       'reachBeginning',
       'reachEnd',
       'fromEdge',
       'setTranslate',
       'setTransition',
       'resize',
       'observerUpdate',
       'beforeLoopFix',
       'loopFix'
   ];/*! *****************************************************************************
   Copyright (c) Microsoft Corporation. All rights reserved.
   Licensed under the Apache License, Version 2.0 (the "License"); you may not use
   this file except in compliance with the License. You may obtain a copy of the
   License at http://www.apache.org/licenses/LICENSE-2.0
   
   THIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
   KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED
   WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,
   MERCHANTABLITY OR NON-INFRINGEMENT.
   
   See the Apache Version 2.0 License for specific language governing permissions
   and limitations under the License.
   ***************************************************************************** */
   
   function __spreadArrays() {
       for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;
       for (var r = Array(s), k = 0, i = 0; i < il; i++)
           for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)
               r[k] = a[j];
       return r;
   }/**
    * @file vue-awesome-swiper
    * @module utils
    * @author Surmon <https://github.com/surmon-china>
    */
   var kebabcase = function (string) {
       return string
           .replace(/([a-z])([A-Z])/g, '$1-$2')
           .replace(/\s+/g, '-')
           .toLowerCase();
   };/**
    * @file vue-awesome-swiper
    * @module event
    * @author Surmon <https://github.com/surmon-china>
    */
   var handleClickSlideEvent = function (swiper, event, emit) {
       var _a, _b, _c;
       if (swiper && !(swiper.destroyed)) {
           var eventPath = ((_a = event.composedPath) === null || _a === void 0 ? void 0 : _a.call(event)) || event.path;
           if ((event === null || event === void 0 ? void 0 : event.target) && eventPath) {
               var slides_1 = Array.from(swiper.slides);
               var paths = Array.from(eventPath);
               // Click slide || slide[children]
               if (slides_1.includes(event.target) || paths.some(function (item) { return slides_1.includes(item); })) {
                   var clickedIndex = swiper.clickedIndex;
                   var reallyIndex = Number((_c = (_b = swiper.clickedSlide) === null || _b === void 0 ? void 0 : _b.dataset) === null || _c === void 0 ? void 0 : _c.swiperSlideIndex);
                   var reallyIndexValue = Number.isInteger(reallyIndex) ? reallyIndex : null;
                   emit(ComponentEvents.ClickSlide, clickedIndex, reallyIndexValue);
                   emit(kebabcase(ComponentEvents.ClickSlide), clickedIndex, reallyIndexValue);
               }
           }
       }
   };
   var bindSwiperEvents = function (swiper, emit) {
       SWIPER_EVENTS.forEach(function (eventName) {
           swiper.on(eventName, function () {
               var arguments$1 = arguments;
   
               var args = [];
               for (var _i = 0; _i < arguments.length; _i++) {
                   args[_i] = arguments$1[_i];
               }
               emit.apply(void 0, __spreadArrays([eventName], args));
               var kebabcaseName = kebabcase(eventName);
               if (kebabcaseName !== eventName) {
                   emit.apply(void 0, __spreadArrays([kebabcaseName], args));
               }
           });
       });
   };/**
    * @file vue-awesome-swiper
    * @module directive
    * @author Surmon <https://github.com/surmon-china>
    */
   var INSTANCE_NAME_KEY = 'instanceName';
   function getDirective(SwiperClass, globalOptions) {
       var getStandardisedOptionByAttrs = function (vnode, key) {
           var _a, _b, _c, _d;
           var value = (_b = (_a = vnode.data) === null || _a === void 0 ? void 0 : _a.attrs) === null || _b === void 0 ? void 0 : _b[key];
           return value !== undefined
               ? value
               : (_d = (_c = vnode.data) === null || _c === void 0 ? void 0 : _c.attrs) === null || _d === void 0 ? void 0 : _d[kebabcase(key)];
       };
       // Get swiper instace name in directive
       var getSwiperInstanceName = function (element, binding, vnode) {
           return (binding.arg ||
               getStandardisedOptionByAttrs(vnode, INSTANCE_NAME_KEY) ||
               element.id ||
               CoreNames.SwiperInstance);
       };
       var getSwiperInstance = function (element, binding, vnode) {
           var instanceName = getSwiperInstanceName(element, binding, vnode);
           return vnode.context[instanceName] || null;
       };
       var getSwipeOptions = function (binding) {
           return binding.value || globalOptions;
       };
       var getBooleanValueByInput = function (input) {
           return [true, undefined, null, ''].includes(input);
       };
       // Emit event in Vue directive
       var getEventEmiter = function (vnode) {
           var _a, _b;
           var handlers = ((_a = vnode.data) === null || _a === void 0 ? void 0 : _a.on) || ((_b = vnode.componentOptions) === null || _b === void 0 ? void 0 : _b.listeners);
           return function (name) {
               var arguments$1 = arguments;
   
               var args = [];
               for (var _i = 1; _i < arguments.length; _i++) {
                   args[_i - 1] = arguments$1[_i];
               }
               var _a;
               var handle = (_a = handlers) === null || _a === void 0 ? void 0 : _a[name];
               if (handle) {
                   handle.fns.apply(handle, args);
               }
           };
       };
       return {
           // Init
           bind: function (element, binding, vnode) {
               // auto class name
               if (element.className.indexOf(DEFAULT_CLASSES.containerClass) === -1) {
                   element.className += ((element.className ? ' ' : '') + DEFAULT_CLASSES.containerClass);
               }
               // bind click event
               element.addEventListener('click', function (event) {
                   var emitEvent = getEventEmiter(vnode);
                   var swiper = getSwiperInstance(element, binding, vnode);
                   handleClickSlideEvent(swiper, event, emitEvent);
               });
           },
           // DOM inserted
           inserted: function (element, binding, vnode) {
               var context = vnode.context;
               var swiperOptions = getSwipeOptions(binding);
               var instanceName = getSwiperInstanceName(element, binding, vnode);
               var emitEvent = getEventEmiter(vnode);
               var vueContext = context;
               var swiper = vueContext === null || vueContext === void 0 ? void 0 : vueContext[instanceName];
               // Swiper will destroy but not delete instance, when used <keep-alive>
               if (!swiper || swiper.destroyed) {
                   swiper = new SwiperClass(element, swiperOptions);
                   vueContext[instanceName] = swiper;
                   bindSwiperEvents(swiper, emitEvent);
                   emitEvent(ComponentEvents.Ready, swiper);
                   // MARK: Reinstance when the nexttick with <keep-alive>
                   // Vue.nextTick(instancing) | setTimeout(instancing)
               }
           },
           // On options changed or DOM updated
           componentUpdated: function (element, binding, vnode) {
               var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m;
               var autoUpdate = getStandardisedOptionByAttrs(vnode, ComponentPropNames.AutoUpdate);
               if (getBooleanValueByInput(autoUpdate)) {
                   var swiper = getSwiperInstance(element, binding, vnode);
                   if (swiper) {
                       var swiperOptions = getSwipeOptions(binding);
                       var isLoop = swiperOptions.loop;
                       if (isLoop) {
                           (_b = (_a = swiper) === null || _a === void 0 ? void 0 : _a.loopDestroy) === null || _b === void 0 ? void 0 : _b.call(_a);
                       }
                       (_c = swiper === null || swiper === void 0 ? void 0 : swiper.update) === null || _c === void 0 ? void 0 : _c.call(swiper);
                       (_e = (_d = swiper.navigation) === null || _d === void 0 ? void 0 : _d.update) === null || _e === void 0 ? void 0 : _e.call(_d);
                       (_g = (_f = swiper.pagination) === null || _f === void 0 ? void 0 : _f.render) === null || _g === void 0 ? void 0 : _g.call(_f);
                       (_j = (_h = swiper.pagination) === null || _h === void 0 ? void 0 : _h.update) === null || _j === void 0 ? void 0 : _j.call(_h);
                       if (isLoop) {
                           (_l = (_k = swiper) === null || _k === void 0 ? void 0 : _k.loopCreate) === null || _l === void 0 ? void 0 : _l.call(_k);
                           (_m = swiper === null || swiper === void 0 ? void 0 : swiper.update) === null || _m === void 0 ? void 0 : _m.call(swiper);
                       }
                   }
               }
           },
           // Destroy this directive
           unbind: function (element, binding, vnode) {
               var _a;
               var autoDestroy = getStandardisedOptionByAttrs(vnode, ComponentPropNames.AutoDestroy);
               if (getBooleanValueByInput(autoDestroy)) {
                   var swiper = getSwiperInstance(element, binding, vnode);
                   if (swiper && swiper.initialized) {
                       (_a = swiper === null || swiper === void 0 ? void 0 : swiper.destroy) === null || _a === void 0 ? void 0 : _a.call(swiper, getBooleanValueByInput(getStandardisedOptionByAttrs(vnode, ComponentPropNames.DeleteInstanceOnDestroy)), getBooleanValueByInput(getStandardisedOptionByAttrs(vnode, ComponentPropNames.CleanupStylesOnDestroy)));
                   }
               }
           }
       };
   }/**
    * @file vue-awesome-swiper
    * @module SwiperComponent
    * @author Surmon <https://github.com/surmon-china>
    */
   var SlotNames;
   (function (SlotNames) {
       SlotNames["ParallaxBg"] = "parallax-bg";
       SlotNames["Pagination"] = "pagination";
       SlotNames["Scrollbar"] = "scrollbar";
       SlotNames["PrevButton"] = "button-prev";
       SlotNames["NextButton"] = "button-next";
   })(SlotNames || (SlotNames = {}));
   function getSwiperComponent(SwiperClass) {
       var _a;
       return Vue.extend({
           name: CoreNames.SwiperComponent,
           props: (_a = {
                   defaultOptions: {
                       type: Object,
                       required: false,
                       default: function () { return ({}); }
                   },
                   // eslint-disable-next-line vue/require-default-prop
                   options: {
                       type: Object,
                       required: false
                   }
               },
               _a[ComponentPropNames.AutoUpdate] = {
                   type: Boolean,
                   default: true
               },
               // https://github.com/surmon-china/vue-awesome-swiper/pull/550/files
               _a[ComponentPropNames.AutoDestroy] = {
                   type: Boolean,
                   default: true
               },
               // https://github.com/surmon-china/vue-awesome-swiper/pull/388
               _a[ComponentPropNames.DeleteInstanceOnDestroy] = {
                   type: Boolean,
                   required: false,
                   default: true
               },
               _a[ComponentPropNames.CleanupStylesOnDestroy] = {
                   type: Boolean,
                   required: false,
                   default: true
               },
               _a),
           data: function () {
               var _a;
               return _a = {},
                   _a[CoreNames.SwiperInstance] = null,
                   _a;
           },
           computed: {
               swiperInstance: {
                   cache: false,
                   set: function (swiper) {
                       this[CoreNames.SwiperInstance] = swiper;
                   },
                   get: function () {
                       return this[CoreNames.SwiperInstance];
                   }
               },
               swiperOptions: function () {
                   return this.options || this.defaultOptions;
               },
               wrapperClass: function () {
                   return this.swiperOptions.wrapperClass || DEFAULT_CLASSES.wrapperClass;
               }
           },
           methods: {
               // Feature: click event
               handleSwiperClick: function (event) {
                   handleClickSlideEvent(this.swiperInstance, event, this.$emit.bind(this));
               },
               autoReLoopSwiper: function () {
                   var _a, _b;
                   if (this.swiperInstance && this.swiperOptions.loop) {
                       // https://github.com/surmon-china/vue-awesome-swiper/issues/593
                       // https://github.com/surmon-china/vue-awesome-swiper/issues/544
                       // https://github.com/surmon-china/vue-awesome-swiper/pull/545/files
                       var swiper = this.swiperInstance;
                       (_a = swiper === null || swiper === void 0 ? void 0 : swiper.loopDestroy) === null || _a === void 0 ? void 0 : _a.call(swiper);
                       (_b = swiper === null || swiper === void 0 ? void 0 : swiper.loopCreate) === null || _b === void 0 ? void 0 : _b.call(swiper);
                   }
               },
               updateSwiper: function () {
                   var _a, _b, _c, _d, _e, _f, _g, _h;
                   if (this[ComponentPropNames.AutoUpdate] && this.swiperInstance) {
                       this.autoReLoopSwiper();
                       (_b = (_a = this.swiperInstance) === null || _a === void 0 ? void 0 : _a.update) === null || _b === void 0 ? void 0 : _b.call(_a);
                       (_d = (_c = this.swiperInstance.navigation) === null || _c === void 0 ? void 0 : _c.update) === null || _d === void 0 ? void 0 : _d.call(_c);
                       (_f = (_e = this.swiperInstance.pagination) === null || _e === void 0 ? void 0 : _e.render) === null || _f === void 0 ? void 0 : _f.call(_e);
                       (_h = (_g = this.swiperInstance.pagination) === null || _g === void 0 ? void 0 : _g.update) === null || _h === void 0 ? void 0 : _h.call(_g);
                   }
               },
               destroySwiper: function () {
                   var _a, _b;
                   if (this[ComponentPropNames.AutoDestroy] && this.swiperInstance) {
                       // https://github.com/surmon-china/vue-awesome-swiper/pull/341
                       // https://github.com/surmon-china/vue-awesome-swiper/issues/340
                       if (this.swiperInstance.initialized) {
                           (_b = (_a = this.swiperInstance) === null || _a === void 0 ? void 0 : _a.destroy) === null || _b === void 0 ? void 0 : _b.call(_a, this[ComponentPropNames.DeleteInstanceOnDestroy], this[ComponentPropNames.CleanupStylesOnDestroy]);
                       }
                   }
               },
               initSwiper: function () {
                   this.swiperInstance = new SwiperClass(this.$el, this.swiperOptions);
                   bindSwiperEvents(this.swiperInstance, this.$emit.bind(this));
                   this.$emit(ComponentEvents.Ready, this.swiperInstance);
               }
           },
           mounted: function () {
               if (!this.swiperInstance) {
                   this.initSwiper();
               }
           },
           // Update swiper when the parent component activated with `keep-alive`.
           activated: function () {
               this.updateSwiper();
           },
           updated: function () {
               this.updateSwiper();
           },
           beforeDestroy: function () {
               // https://github.com/surmon-china/vue-awesome-swiper/commit/2924a9d4d3d1cf51c0d46076410b1f804b2b8a43#diff-7f4e0261ac562c0f354cb91a1ca8864f
               this.$nextTick(this.destroySwiper);
           },
           render: function (createElement) {
               return createElement('div', {
                   staticClass: DEFAULT_CLASSES.containerClass,
                   on: {
                       click: this.handleSwiperClick
                   }
               }, [
                   this.$slots[SlotNames.ParallaxBg],
                   createElement('div', {
                       class: this.wrapperClass
                   }, this.$slots.default),
                   this.$slots[SlotNames.Pagination],
                   this.$slots[SlotNames.PrevButton],
                   this.$slots[SlotNames.NextButton],
                   this.$slots[SlotNames.Scrollbar]
               ]);
           }
       });
   }/**
    * @file vue-awesome-swiper
    * @module SwiperSlideComponent
    * @author Surmon <https://github.com/surmon-china>
    */
   var SwiperSlideComponent = Vue.extend({
       name: CoreNames.SwiperSlideComponent,
       computed: {
           slideClass: function () {
               var _a, _b;
               return ((_b = (_a = this.$parent) === null || _a === void 0 ? void 0 : _a.swiperOptions) === null || _b === void 0 ? void 0 : _b.slideClass) || DEFAULT_CLASSES.slideClass;
           }
       },
       methods: {
           update: function () {
               var _a;
               var parent = this.$parent;
               // https://github.com/surmon-china/vue-awesome-swiper/issues/632
               if (parent[ComponentPropNames.AutoUpdate]) {
                   (_a = parent === null || parent === void 0 ? void 0 : parent.swiperInstance) === null || _a === void 0 ? void 0 : _a.update();
               }
           }
       },
       mounted: function () {
           this.update();
       },
       updated: function () {
           this.update();
       },
       render: function (createElement) {
           return createElement('div', {
               class: this.slideClass
           }, this.$slots.default);
       }
   });/**
    * @file vue-awesome-swiper
    * @module exporter
    * @author Surmon <https://github.com/surmon-china>
    */
   var getInstaller = function (SwiperClass) {
       var install = function (Vue, globalOptions) {
           if (install.installed)
               { return; }
           var SwiperComponent = getSwiperComponent(SwiperClass);
           if (globalOptions) {
               SwiperComponent.options.props.defaultOptions.default = function () { return globalOptions; };
           }
           Vue.component(CoreNames.SwiperComponent, SwiperComponent);
           Vue.component(CoreNames.SwiperSlideComponent, SwiperSlideComponent);
           Vue.directive(CoreNames.SwiperDirective, getDirective(SwiperClass, globalOptions));
           install.installed = true;
       };
       return install;
   };
   function exporter(SwiperClass) {
       var _a;
       return _a = {
               version: '4.1.1',
               install: getInstaller(SwiperClass),
               directive: getDirective(SwiperClass)
           },
           _a[CoreNames.SwiperComponent] = getSwiperComponent(SwiperClass),
           _a[CoreNames.SwiperSlideComponent] = SwiperSlideComponent,
           _a;
   }/**
    * @file vue-awesome-swiper
    * @module default-export
    * @author Surmon <https://github.com/surmon-china>
    */
   var VueAwesomeSwiper = exporter(SwiperClass);
   var version = VueAwesomeSwiper.version;
   var install = VueAwesomeSwiper.install;
   var directive = VueAwesomeSwiper.directive;
   var Swiper = VueAwesomeSwiper.Swiper;
   var SwiperSlide = VueAwesomeSwiper.SwiperSlide;exports.Swiper=Swiper;exports.SwiperSlide=SwiperSlide;exports.default=VueAwesomeSwiper;exports.directive=directive;exports.install=install;exports.version=version;Object.defineProperty(exports,'__esModule',{value:true});})));